package com.meilai.project.service.business.customer;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.meilai.project.dto.business.customer.CustomerInfoFlowDTO;
import com.meilai.project.entity.business.customer.CustomerInfoFlow;
import com.meilai.project.vo.business.customer.CustomerChangeVO;
import com.meilai.project.vo.business.customer.CustomerFlowVO;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author xhy
 * @since 2022-01-06
 */
public interface CustomerInfoFlowService extends IService<CustomerInfoFlow> {

    /**
     * 保存信息到草稿箱
     *
     * @param dto
     * @param tmp 是否进草稿箱
     * @return
     */
    Boolean save(CustomerInfoFlowDTO dto, Boolean tmp, Long wfData_id);

    /**
     * 提交信息并进入审批流程
     *
     * @param dto
     * @return
     */
    Boolean saveAndStartFlow(CustomerInfoFlowDTO dto, Long wfData_id);

    /**
     * 审核方法
     *
     * @param dto      客户信息
     * @param isCover  是否覆盖
     * @param isReturn 是否通过
     * @return
     */
    Boolean check(CustomerInfoFlowDTO dto, Boolean isCover, Boolean isReturn, String opinion);


    /**
     * 删除流程
     *
     * @param flow_id
     * @return
     */
    Boolean remove(Long flow_id, Long wfData_id);

    /**
     * 分页查询
     *
     * @param current_page
     * @param page_size
     * @return
     */
    Page<CustomerFlowVO> page(Integer current_page, Integer page_size, String name, Long industry_id, Boolean is_my_customer_page);

    /**
     * 跟进审批id获取审批的客户信息
     *
     * @param id
     * @return
     */
    CustomerInfoFlowDTO getOneDtoById(Long id);

    /**
     * 判断用户草稿箱是否为空
     * 如果不为空 返回记录的ID
     * 如果为空 返回-1
     */
    Long draftsIsNull();

    /**
     * 判断客户基本数据信息是否进行了修改
     *
     * @param dto
     * @return
     */
    List<CustomerChangeVO> equalsData(CustomerInfoFlowDTO dto);

    /**
     * 获取审核数量
     *
     * @param is_my_customer_page
     * @return
     */
    Integer getFlowCheckCount(Boolean is_my_customer_page);

    /**
     * 获取当前操作人是否是最后一个人
     *
     * @param id
     * @return
     */
    Boolean getFlowIsEnd(Long id);

    /**
     * 彻底删除方法
     *
     * @param flow_id
     * @return
     */
    Boolean actualDelete(Long flow_id, Long wfData_id);

    /**
     * 获取历史对接人信息
     * @param customer_id
     * @return
     */
    List<String> getHistoryUser(Long customer_id);

    CustomerInfoFlowDTO getFlowDtoById(Long id);
}
